#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <ranges>
namespace rg = std::ranges;

int main() {
    std::vector<int> a{4, 1, 6, 2, 9, 5};
    std::vector<int> b;
    // std::back_inserter 是一个 迭代器适配器（iterator adapter），
    // 它返回一个 插入迭代器（insert iterator）， 具体来说是 std::back_insert_iterator。
    // 这个迭代器的作用是通过调用容器的 push_back 方法将元素添加到容器的末尾
    rg::copy_if(a, std::back_inserter(b), [](int x) {
        return x < 5;
    });
    for (auto i : b) {
        std::cout << i << std::endl;
    }
    auto c = a | std::views::filter([] (int x) { return x < 5; });
    for (auto i : c) {
        std::cout << i << std::endl;
    }
    return 0;
}
